/*
 * $Id: tags-cats-dialogs.js 48 2012-02-20 17:53:46Z rook.alex@gmail.com $
 * @description category & tags edit dialogs
 */

$.fn.extend({
    getCategoryList:function($e){
        var dlg=$(this);
        // alert(dlg);
        $.getJSON("/json/category",
        {},
            function(data) {  //пришел ответ от сервера
                //   alert(dlg.attr("id"));
                $("[name=catlist]",dlg).html(""); //удалить содержимое <select name="catlist">.....

                $.each(data, function(i,item){//создать <option> для каждой категории, для формата data  см. сырой json
                    dlg.find("[name=catlist]").append($("<option/>").text(item.categoryName).attr("value",item.ident));
                //  alert(item.categoryName+"|"+item.ident);
                });
                //выставить последнюю UID категорию в качестве активной в списке
                var lastCat="option[value="+ $("form",dlg).find("[name=cathid]").val()+"]"; // alert(lastCat);
                $("select[name=catlist]",dlg).find(lastCat).attr("selected", "selected");

                $("[name=catlist]",dlg).trigger("change.catlist"); //без принудительного триггера не происходит событие change при программном изменении тега <select>
                dlg.trigger("List.Category",data);
                dlg.trigger("List",data);
            });  
        return dlg;
    },
    getTagList:function($e){
        var dlg=$(this);
        // alert(dlg);
        $.getJSON("/json/tag",
            dlg.currentValues(),
            function(data) {  //пришел ответ от сервера
        
                $("[name=taglist]",dlg).html(""); //удалить содержимое <select name="taglist">.....
                $.each(data, function(i,item){//создать <option> для каждого тэга
                    dlg.find("[name=taglist]").append($("<option/>").text(item.tagName).attr("value",item.ident));
                //alert(item.tagName+"|"+item.ident);
                });
                //выставить последний UID тэг в качестве активного в списке
                var lastTag="option[value="+ $("form",dlg).find("[name=taghid]").val()+"]"; 
                $("select[name=taglist]",dlg).find(lastTag).attr("selected", "selected");
                
                $("[name=taglist]",dlg).trigger("change.taglist");
                dlg.trigger("List.Tag",data);
                dlg.trigger("List",data);
            });  
        return dlg;
    },
    currentValues:function(){ 
        /*  выбирает значения полей в диалоге,
         *  если поле не существует, то равно undefined
         *  при запросе к сервлету, лишние параметры игнорируются 
         */
        
        var dlg=$(this);
        /*ArticleCategory support*/
        var $bufselect=$("[name=catlist]",dlg);
        var selcategory=$("option:selected",$bufselect).text();
        var newcategory=dlg.find("[name=catname]").val();
        
        /*tag support*/
        $bufselect=$("[name=taglist]",dlg);
        var seltag=$("option:selected",$bufselect).text();
        var newtag=dlg.find("[name=tagname]").val();
        
        return {
            "selcategory":selcategory,
            "newcategory":newcategory,
            "seltag":seltag,
            "newtag":newtag
        };
    },
    UIDCategory:function(action){        //ArticleCategory Update,Insert,Delete function
        var dlg=$(this);
        var params=dlg.currentValues();
        params.action=action;
        $.getJSON("/json/category",
            params,
            function(data) {  //пришел ответ от сервера
                dlg.trigger("UID.Category",data); // type.namespace
                dlg.trigger("UID",data);
            //$("[name=catlist]",dlg)
            });

        return dlg;

    },
    UIDTag:function(action){        // Tag Update,Insert,Delete function
        var dlg=$(this);
        var params=dlg.currentValues();
        params.action=action;
        $.getJSON("/json/tag",
            params,
            function(data) {  //пришел ответ от сервера
                dlg.trigger("UID.Tag",data); // type.namespace
                dlg.trigger("UID",data);
            });

        return dlg;

    },
    
    doEvent:function(event,data){
      //  alert(event.type);
      //  alert(event.namespace);
        //var tg=event.target.attributes;
        var dlg=$(this);
        var attrName=$(event.target,dlg).attr("name"); //имя элемента в котором произошло событие
        var dlgId=dlg.attr("id");//Id текущего элемента
        var attrVal=$(event.target,dlg).val(); //значение аттрибута value для текущего элемента (для разнообразных input'ов)
        var action=$("[name=ruid]:checked",dlg).val(); //выбор значения радиокнопки-"действие"
        
         
        if((event.type=="Show")&&(event.namespace=="Dialog")){  //во время показа диалога
            dlg.getCategoryList(event); //обновить список категорий
        }

        
        //    alert(attrName+"|"+event.type+"|"+attrVal);
        if((attrName=="ruid")&&(event.type="click"))  // пользователь щелкает по радиокнопкам
        {
            //    alert(attrName+"|"+event.type+"|"+attrVal);
            if (attrVal=="del") {//блокировать поле ввода при выборе радиокнопки del
                $("[name=catname],[name=tagname]").attr("disabled","disabled").css("background-color","gray");
            } else {
                $("[name=catname],[name=tagname]").removeAttr("disabled").css("background-color","");
            }
        }
        
        if (dlgId=="category-dlg") 
        { //Для диалога "Категории"
            if(attrName=="run") { // нажата кнопка "выполнить"
                dlg.UIDCategory(action);  
            }
            
            if(event.type=="List"){ //получен список категорий от сервера

            }
            
            if (event.type=="UID") {//операции вставки/удаления/изменения для категории
                dlg.getCategoryList(event); //обновить список категорий
                if (data.ent){
                    // alert(data.ent.ident);
                    $("form",dlg).find("[name=cathid]").val(data.ent.ident); //запомнить ключ в скрытом поле, сервер возвращает ключ для категории, над которой производилась вставка/обновление
                }
            }
            
        }//диалог "Категории"
           
               
        if (dlgId=="tags-dlg") 
        { //Для диалога "Тэги"
           
            if(((attrName=="catlist")     //в списоке категорий
                &&(event.type=="change") //выбрана другая категория или получен "Список категорий"
                )){ 
                dlg.getTagList(event);
            // alert("catlist change") ;
            }
            if(attrName=="run")  // нажата кнопка "выполнить"
            {  //Для диалога "Тэги"
                dlg.UIDTag(action);  
            }
            
            if(event.type=="UID"){ //операции вставки/удаления/изменения для тэга
                dlg.getTagList(event); //обновить список тэгов
                if (data.ent){
                    //  alert(data.ent.ident);
                    $("form",dlg).find("[name=taghid]").val(data.ent.ident); //запомнить ключ в скрытом поле, сервер возвращает ключ для тэга, для которого производилась вставка/обновление
                }
            }
            if(event.type=="List"){ //получен список категорий от сервера
                
            }
            
        }//диалог "Тэги"
         
        return dlg;
        
    }, //end doEvent
    
    setupDlg:function(){
        var dlg=$(this);
        
        //создать скрытые поля для хранения промежуточных значений
        var cathid=$("<input/>").attr("type","hidden").attr("name", "cathid");
        $("form",dlg).append(cathid);
        var taghid=$("<input/>").attr("type","hidden").attr("name", "taghid");
        $("form",dlg).append(taghid);
      
       
        return dlg;
    },
    CategoryDialog:function(runlink){
        var priority=3;
        var dlg= $("#category-dlg").ModalDialog(runlink,priority).setupDlg();

        dlg.on({
            "Show.Dialog":dlg.doEvent, //показ диалога
            "UID.Category":dlg.doEvent,//операции вставки/удаления/изменения
            "List.Category":dlg.doEvent,//выборка списка категорий с сервера
            click:  dlg.doEvent
        //    change: dlg.doEvent
        });
        return dlg;
    },
    TagsDialog:function(runlink){
        var priority=3;
        var dlg=$("#tags-dlg").ModalDialog(runlink,priority).setupDlg();
        dlg.on({
            "Show.Dialog":dlg.doEvent, //показ диалога
            "UID.Tag":dlg.doEvent,//операции вставки/удаления/изменения
            "List.Tag":dlg.doEvent,//выборка списка тэгов с сервера
            click: dlg.doEvent, 
            change:dlg.doEvent
        });
        return dlg;
    }
});

